home *** CD-ROM | disk | FTP | other *** search
/ Amiga Tools 2 / Amiga Tools 2.iso / tools / packer / xpkarchive / examples / xcopy2.c < prev    next >
C/C++ Source or Header  |  1995-03-09  |  3KB  |  110 lines

  1. #include <stdlib.h>
  2. #include <stdio.h>
  3.  
  4. #include <libraries/xpkarchive.h>
  5.  
  6. struct Library *XpkArchiveBase;
  7.  
  8. char srcname[41],dstname[41],tmp[41];
  9.  
  10. char *filenote=NULL;
  11.  
  12. main(int argc,char *argv[])
  13. {
  14.    int a;
  15.    XarHandle *src,*dst;
  16.    LONG Error;
  17.  
  18.    XpkArchiveBase=OpenLibrary("xpkarchive.library",1);
  19.    if(!XpkArchiveBase) {
  20.       fprintf(stderr,"Cannot open xpkarchive.library\n");
  21.       exit(0);
  22.    }
  23.  
  24.    if(argc<4) {
  25.       fprintf(stderr,"Usage: %s <src_arc> <dst_arc> [+note] <file1[,gen]>#<out1[,gen]> [<file2>#<out2> ...]\n",argv[0]);
  26.       goto fail1;
  27.    }
  28.  
  29.    if(!(src=XarOpenArchive(XAR_ArchiveName,argv[1],
  30.                            XAR_Error,&Error,TAG_DONE))) {
  31.       fprintf(stderr,"Cannot open source archive.Error: %ld\n",Error);
  32.       goto fail1;
  33.    }
  34.  
  35.    if(!(dst=XarOpenArchive(XAR_ArchiveName,argv[2],
  36.                            XAR_ArchiveMode,XAR_ModeAppend,
  37.                            XAR_Error,&Error,TAG_DONE))) {
  38.       fprintf(stderr,"Cannot open source archive.Error: %ld\n",Error);
  39.       goto fail2;
  40.    }
  41.  
  42.  
  43.    for(a=3;a<argc;a++) {
  44.       int srcgen=1,dstgen=1;
  45.  
  46.       if(argv[a][0]=='+') {
  47.          filenote=&argv[a][1];
  48.          continue;
  49.       }
  50.  
  51.       switch(sscanf(argv[a],"%40[^#]#%40s",srcname,dstname)) {
  52.  
  53.          case 0: fprintf(stderr,"internal error\n");
  54.                  goto fail3;
  55.                  break;
  56.  
  57.          case 1: strcpy(tmp,srcname);
  58.                  sscanf(tmp,"%40[^,],%d",srcname,&srcgen);
  59.                  strcpy(dstname,srcname);
  60.                  dstgen=srcgen;
  61.                  break;
  62.          case 2: strcpy(tmp,srcname);
  63.                  sscanf(tmp,"%40[^,],%d",srcname,&srcgen);
  64.                  dstgen=srcgen;
  65.                  strcpy(tmp,dstname);
  66.                  sscanf(tmp,"%40[^,],%d",dstname,&dstgen);
  67.                  break;
  68.       }
  69.  
  70.       if(srcgen>0) srcgen--;
  71.       if(dstgen>0) dstgen--;
  72.  
  73.       printf("Generation %d of %s -> %d of %s\n",srcgen+1,srcname,
  74.                                                     dstgen+1,dstname);
  75.  
  76.       XarCopyFile(XAR_Archive,src,XAR_DestArchive,dst,
  77.                   XAR_FileName,srcname,XAR_Generation,srcgen,
  78.                   XAR_NewName,dstname,XAR_NewGeneration,dstgen,
  79.                   XAR_AutoNextGen,0,XAR_FileNote,filenote,
  80.                   XAR_Error,&Error,TAG_DONE);
  81.  
  82.       if(Error>=XARERROR_LEVEL) {
  83.          fprintf(stderr,"Fatal Error: %ld\n",Error);
  84.          break;
  85.       }
  86.    }
  87.  
  88. fail3:
  89.    XarCloseArchive(dst);
  90. fail2:
  91.    XarCloseArchive(src);
  92. fail1:
  93.    CloseLibrary(XpkArchiveBase);
  94.    exit(0);
  95.  
  96. }
  97.  
  98.  
  99.  
  100.  
  101.  
  102.  
  103.  
  104.  
  105.  
  106.  
  107.  
  108.  
  109.  
  110.